Js使用记录

  1. 数组中删除/过滤 特定/随机 元素
  2. delete 慎用,虽然只可以删除自己,但原型链仍会作用
    是用来删除对象属性的,而不是变量,比如:var a;。严格模式会报错

  3. 数组sort可以同时按照多个属性排序

  4. 按照中文排序return nameA.localeCompare(nameB,systemInfo.lang);
  5. hybris开发 提供一段字符串以供调用(c++)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // v0 行内:空head,有body 
    var str='<body style="padding:5px 0;line-height:100%;color:#fff;background:#000;font-family:\'Microsoft Yahei\';font-size:25px;text-align:center;"><span style="color:#FD6400">0</span> 天 <span style="color:#FD6400">7</span> 时 <span style="color:#FD6400">49</span> 分 <span style="color:#FD6400">23</span> 秒</body>';
    // v0.1 行内: 同v0
    var str='<html><body style="padding:5px 0;color:#fff;background:#000;font-family:\'Microsoft Yahei\';font-size:25px;text-align:center;"><span style="color:#FD6400">0</span> 天 <span style="color:#FD6400">7</span> 时 <span style="color:#FD6400">49</span> 分 <span style="color:#FD6400">23</span> 秒</body></html>';
    // v1.0: style: .html() 文档没有head和body
    var str='<body><style>html{background:#000;color:#fff;}span{color:#FD6400}</style>sdfsfs<span> clorlo </span></body>';
    // v1.1 style: .html() 文档没有head和body
    var str='<head><style>html{background:#000;color:#fff;}span{color:#FD6400}</style></head><body>sdfsfs<span> clorlo </span></body>';
    $('html').html(str);//
  6. 语句简写(三元操作或者短路运算)在赋值时需要注意()的添加

    1
    2
    3
    4
    5
     // 三元操作,后面的赋值不加`()`会报错:`Uncaught ReferenceError: Invalid left-hand side in assignment`
    v.SubscribeDisplayName&&(sTitle = v.SubscribeDisplayName.formatForJS());

    // 赋值操作中,短路运算不加`()`会影响 str的赋值:`Philip</a>`;`&&`前面的都没有计进去
    str = '<a href="login/channel.php?id=' + encodeURIComponent(d[3]) + '">' + (oCdrData.FAuthorName&&oCdrData.FAuthorName.formatForHTML()) + '</a>';
  7. [1,2,3].map(parseInt)//[1, NaN, NaN] parseInt(string, radix) radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
    如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
    如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

  8. numObj.toString([radix]) radix: 指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。
    对于 Number 对象,toString() 方法以指定的基数返回该对象的字符串表示。对象覆盖了 Object 对象上的 toString() 方法,它不是继承的 Object.prototype.toString()。
    进行数字到字符串的转换时,建议用小括号将要转换的目标括起来,防止出错。(8).toString(2) //1000
    Object.prototype.toString.call(null);//"[object Null]"
  9. 生成一个随机数(Math.random()*Math.pow(2,64)).toString(36)
    Math.random().toString(36).substring(2)

    Math.random: 这个随机数的小数长度不固定,但是经过测试(一亿次),最小出现过4位,最大出现过24位。如果运气不是特别特别差的话,基本上是不会出现0的情况。小数期望长度16位。

    Number对象拥有toString方法,该方法可以将Number对象转化成字符串。
    三十六进制实际上就是(0-9,a-z),十个数字加26个英文字母。
    将随机数转变成三十六进制,实际就相当于变成了数字+字母的随机字符串
    我们所要做的就是取小数点后面的字符串

    ("0000" + (Math.random()*Math.pow(36,4) << 0).toString(36)).slice(-4)

    想要获得更长的字符串怎么办?也很简单啦,只要用Math.floor代替<<取整就可以了。

  10. JSON.parse(s)的时候 字符串中不可以带\r,\n,\t需要换成\\r,\\n,或者''.
    但是如果是经过 JSON.stringify()过的可以解析通过var s={name:'sdf\r\nsadf'} ss=JSON.stringify(s);var r=JSON.parse(ss)
  11. js unicode编码

    1
    2
    3
    4
    5
    'a'.charCodeAt(0); /*97*/
    'a'.charCodeAt().toString(16); /*61*/
    '\u0061' /* 'a' */
    'a'.length /* 1 */
    '中'.length /* 1 */
  12. 后台直接返回一个json对象处理:
    xhr和fetch经处理后返回的都是字符串类型,需要解析。JSON.parse()并不能成功解析
    xhr:jsonO=eval("("+data+")")
    fetch: res.text().then(data=>{jsonO=eval("("+data+")")})

  13. js预解析不过的时候,页面会报停,包括函数内部出错。

  14. 本地页面(file协议)请求数据时的问题:xhr和fetch,没有试过axios
    不知为什么访问本地服务器api就可以
    1. 向本地的服务器-192.168.1.81发起请求都ok
    2. 向公网发出的请求:
    xhr:捕获到error,但是network中可以看到数据;status:200;type:xhr
    浏览器报错:Failed to load https://www.hello.com/api?...
        No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
    
    fetch-mode:cors:捕获到error,network中可以看不到数据;status:200;type:fetch
    浏览器报错: 和上面一样;加了一行:
        If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
    
    fetch-mode:no-cors: 没有捕获到error,network中没有数据;status:200;type:fetch
    成功的回调中body:null;bodyUsed:false; ok:false;status:0;type:opaque;url:""
    即使header中做了相关设置    
    
  1. jquery深拷贝classInfoData = $.extend(true,[],classInfo);
  1. js keycode
    keyCode 实际键值
    48到57 0到9
    65到90 a到z(A到Z)
    112到135 F1到F24
    8 BackSpace(退格)
    9 Tab
    13 Enter(回车)
    20 Caps_Lock(大写锁定)
    32 Space(空格键)
    37 Left(左箭头)
    38 Up(上箭头)
    39 Right(右箭头)
    40 Down(下箭头)
  1. 使用“at方法”读取数组的尾元素
    1
    2
    3
    const array = [ 1, 2, 3, 4, 5 ]
    const lastItem = array.at(-1) // 5
    const item1 = array.at(0) // 1
knowledge is no pay,reward is kindness
0%